import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'theme_provider.dart';

// 用户额外信息数据模型
class UserExtraInfo {
  final String? grade;
  final String? volume;
  final String? subjects;
  final String? goals;

  UserExtraInfo({this.grade, this.volume, this.subjects, this.goals});

  factory UserExtraInfo.fromJson(Map<String, dynamic> json) {
    return UserExtraInfo(
      grade: json['grade'] as String?,
      volume: json['volume'] as String?,
      subjects: json['subject'] as String?, // API返回的是subject而不是subjects
      goals:
          json['goals'] as String? ?? json['tag'] as String?, // 兼容tag字段作为goals
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'grade': grade,
      'volume': volume,
      'subjects': subjects,
      'goals': goals,
    };
  }

  // 获取完整的年级信息
  String get fullGradeInfo {
    if (grade != null && volume != null) {
      return '$grade$volume';
    } else if (grade != null) {
      return grade!;
    }
    return '未设置';
  }

  // 获取科目列表
  List<String> get subjectsList {
    if (subjects != null && subjects!.isNotEmpty) {
      return subjects!.split('/');
    }
    return [];
  }

  // 检查是否完整
  bool get isComplete {
    // 只要有年级和学期信息就认为是完整的
    // subjects和goals可以为空，因为API可能返回null
    return grade != null &&
        volume != null &&
        grade!.isNotEmpty &&
        volume!.isNotEmpty;
  }

  @override
  String toString() {
    return 'UserExtraInfo(grade: $grade, volume: $volume, subjects: $subjects, goals: $goals)';
  }
}

// 状态管理
class UserExtraInfoNotifier extends StateNotifier<UserExtraInfo?> {
  UserExtraInfoNotifier() : super(null) {
    _loadFromLocal();
  }

  // 主题提供者引用，用于通知主题变化
  ThemeStageNotifier? _themeNotifier;

  // 设置主题提供者引用
  void setThemeNotifier(ThemeStageNotifier themeNotifier) {
    _themeNotifier = themeNotifier;
  }

  // 从本地加载数据
  Future<void> _loadFromLocal() async {
    try {
      final box = Hive.box('app');
      final data = box.get('userExtraInfo');
      if (data != null) {
        state = UserExtraInfo.fromJson(Map<String, dynamic>.from(data));
        print('📱 从本地加载用户额外信息: $state');

        // 加载完成后通知主题提供者
        _notifyThemeProvider();
      }
    } catch (e) {
      print('❌ 从本地加载用户额外信息失败: $e');
    }
  }

  // 保存到本地
  Future<void> _saveToLocal(UserExtraInfo info) async {
    try {
      final box = Hive.box('app');
      await box.put('userExtraInfo', info.toJson());
      print('💾 用户额外信息已保存到本地: $info');
    } catch (e) {
      print('❌ 保存用户额外信息到本地失败: $e');
    }
  }

  // 通知主题提供者
  void _notifyThemeProvider() {
    if (_themeNotifier != null) {
      _themeNotifier!.onUserInfoChanged(state);
    }
  }

  // 更新用户额外信息
  Future<void> updateUserExtraInfo(UserExtraInfo info) async {
    state = info;
    await _saveToLocal(info);
    print('✅ 用户额外信息已更新: $info');

    // 通知主题提供者
    _notifyThemeProvider();
  }

  // 从API响应更新数据
  Future<void> updateFromApiResponse(Map<String, dynamic> data) async {
    try {
      final info = UserExtraInfo.fromJson(data);
      await updateUserExtraInfo(info);
      print('🔄 从API响应更新用户额外信息: $info');
    } catch (e) {
      print('❌ 从API响应更新用户额外信息失败: $e');
    }
  }

  // 检查是否需要从服务器获取数据
  bool get needsServerSync {
    // 如果本地没有数据或不完整，需要同步
    return state == null || !state!.isComplete;
  }

  // 获取数据状态描述
  String get dataStatus {
    if (state == null) {
      return '无数据';
    } else if (!state!.isComplete) {
      return '数据不完整';
    } else {
      return '数据完整';
    }
  }

  // 清除数据
  Future<void> clear() async {
    try {
      final box = Hive.box('app');
      await box.delete('userExtraInfo');
      state = null;
      print('🗑️ 用户额外信息已清除');
    } catch (e) {
      print('❌ 清除用户额外信息失败: $e');
    }
  }
}

// Provider
final userExtraInfoProvider =
    StateNotifierProvider<UserExtraInfoNotifier, UserExtraInfo?>((ref) {
      return UserExtraInfoNotifier();
    });

// 测试方法 - 可以在开发时使用
Future<void> testUserExtraInfo() async {
  final testInfo = UserExtraInfo(
    grade: '一年级',
    volume: '上册',
    subjects: '数学/语文/英语',
    goals: '提高基础成绩',
  );

  print('🧪 测试用户额外信息: $testInfo');
  print('   完整年级信息: ${testInfo.fullGradeInfo}');
  print('   科目列表: ${testInfo.subjectsList}');
  print('   是否完整: ${testInfo.isComplete}');
}

// 测试数据同步逻辑
Future<void> testDataSyncLogic() async {
  final notifier = UserExtraInfoNotifier();

  print('🧪 测试数据同步逻辑:');
  print('   初始状态 - 需要同步: ${notifier.needsServerSync}');
  print('   初始状态 - 数据状态: ${notifier.dataStatus}');

  // 模拟有完整数据
  await notifier.updateUserExtraInfo(
    UserExtraInfo(grade: '一年级', volume: '上册', subjects: '数学', goals: '提高基础成绩'),
  );

  print('   更新后 - 需要同步: ${notifier.needsServerSync}');
  print('   更新后 - 数据状态: ${notifier.dataStatus}');
}
